„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Änderung der Laufzeitprotokollebene mit Golang und GoFr

Änderung der Laufzeitprotokollebene mit Golang und GoFr

Veröffentlicht am 30.07.2024
Durchsuche:244

In diesem Artikel werde ich erläutern, wie Sie die Protokollebene Ihrer Anwendung ändern können, ohne Ihre Anwendung neu starten zu müssen.

Einführung

Protokollebenen werden normalerweise in der Reihenfolge ihrer Wichtigkeit betrachtet: Aktivieren Sie „unwichtige“ Ebenen in der Entwicklung (Hinweis, Debug usw.), aktivieren Sie jedoch nur die „wichtigsten“ Ebenen (Warnung, Fehler usw.). Produktion, wo Ressourcen wie CPU-Zeit und Speicherplatz kostbar sind.

Aber was ist, wenn Ihre Anwendung auf der Ebene „FEHLER“ ausgeführt wird und Sie mit vielen Problemen konfrontiert werden, Sie es aber anhand der Protokolle auf Fehlerebene nicht herausfinden können? Das Ändern der Protokollebene durch eine erneute Bereitstellung der Anwendung wird viel Zeit und Ressourcen in Anspruch nehmen.

Darüber hinaus wird die Ausführung Ihrer Anwendung auf der INFO- oder DEBUG-Ebene in der Produktion eine große Anzahl von Protokollen generieren, die das Protokollierungssystem überlasten können, was zu erhöhten E/A-Vorgängen und Ressourcenverbrauch führt.

Um uns vor diesen Problemen zu bewahren, bietet GoFr - The Ultimate Golang Framework eine sichere Möglichkeit, die Protokollebene zu ändern, ohne Ihre Anwendung neu starten zu müssen.

Protokollebene ändern

Um die Protokollebene zu ändern, erfordert jede GoFr-Anwendung die folgende Konfiguration:

REMOTE_LOG_URL= (e.g., https://log-service.com/log-levels?id=1)

GoFr ruft den bereitgestellten Endpunkt standardmäßig alle 15 Sekunden ab, um die neueste Protokollebene zu erhalten. Dieses Intervall kann durch Hinzufügen der folgenden Konfiguration erhöht oder verringert werden.

REMOTE_LOG_FETCH_INTERVAL= (default: 15)

Log-Level-Dienst

GoFr benötigt die Antwort von der URL im folgenden Format mit zwei Pflichtfeldern:

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}

Lassen Sie uns den Protokollebenendienst erstellen, der unserer Anwendung die Protokollebene bereitstellt.

Ich werde GoFr verwenden, um den Dienst zu erstellen. Weitere Informationen finden Sie in der Dokumentation.

Wir werden MySQL als Datenbank verwenden. Um MySQL hinzuzufügen, fügen Sie die folgenden Konfigurationen in der .env-Datei im Konfigurationsverzeichnis hinzu.

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=log-level
DB_PORT=2001
DB_DIALECT=mysql

Um den MySQL-Docker-Container auszuführen, führen Sie den folgenden Befehl aus

docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30

Fügen wir die Datei main.go mit Migrationen hinzu, um eine Tabelle zu erstellen, und wir verwenden die AddRESTHandler-Funktion, um die Route zu registrieren.

main.go

package main

import (
 "gofr.dev/pkg/gofr"
 "gofr.dev/pkg/gofr/migration"
)

const createTable = `CREATE TABLE level (
    id INT PRIMARY KEY,
    service_name VARCHAR(255) NOT NULL,
    log_level VARCHAR(50) NOT NULL
);
`

func createTableLevel() migration.Migrate {
 return migration.Migrate{
  UP: func(d migration.Datasource) error {
   _, err := d.SQL.Exec(createTable)
   if err != nil {
    return err
   }

   return nil
  },
 }
}

type Level struct {
 ID          int    `json:"id"`
 ServiceName string `json:"serviceName"`
 LogLevel    string `json:"logLevel"`
}

func (u *Level) RestPath() string {
 return "level"
}

func main() {
 app := gofr.New()

 app.Migrate(map[int64]migration.Migrate{1: createTableLevel()})

 err := app.AddRESTHandlers(&Level{})
 if err != nil {
  app.Logger().Fatalf("Failed to register routes for level struct: %v", err)
 }

 app.Run()
}

Nachdem wir den Protokolldienst ausgeführt haben, sehen wir die folgenden Protokolle:

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

Wir haben alle REST-Routen registriert.

Um einen Dienst zu erstellen, senden Sie die folgende Anfrage:

curl --location 'localhost:8000/level' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"INFO",
    "serviceName":"gofr-app"
}'

Um die Protokollebene zu aktualisieren, senden Sie die folgende Anfrage:

curl --location --request PUT 'localhost:8000/level/1' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"DEBUG",
    "serviceName":"gofr-app"
}'

Um die Protokollebene abzurufen, senden Sie die folgende Anfrage:

curl --location 'localhost:8000/level/1'

Dieselbe URL wird in den Konfigurationen unserer Anwendung verwendet, deren Protokollebene remote geändert werden muss.

ABSCHLUSS

Durch die Verwendung der GoFr-Funktion zur Remote-Protokollebenenänderung erhalten Sie Vorteile wie:

  • Mühelose Anpassungen:
    Ändern Sie die Protokollebene jederzeit, ohne die Anwendung neu starten zu müssen. Dies ist insbesondere bei der Fehlerbehebung hilfreich.

  • Verbesserte Sichtbarkeit:
    Wechseln Sie ganz einfach zu einer detaillierteren Protokollebene (z. B. DEBUG), um tiefere Einblicke in bestimmte Probleme zu erhalten, und wechseln Sie dann für den regulären Betrieb wieder zu einer weniger detaillierten Ebene (z. B. INFO).

  • Verbesserte Leistung:
    Das Generieren einer großen Anzahl von Protokollen kann das Protokollierungssystem überlasten, was zu erhöhten E/A-Vorgängen und Ressourcenverbrauch führt. Durch den Wechsel zur Warn- oder Fehlerebene wird die Anzahl der Protokolle verringert, die Leistung verbessert und CLOUD-KOSTEN REDUZIEREN.

Unterstützen Sie GoFr, indem Sie einen ⭐Stern vergeben: https://github.com/gofr-dev/gofr

Darüber hinaus haben Sie Zugriff auf den kostenlosen öffentlichen Endpunkt, um die Spuren Ihrer Anwendung zu exportieren und anzuzeigen @tracer.gofr.dev. 
Um es zu aktivieren, fügen Sie die folgende Konfiguration in Ihre .env-Datei ein

TRACE_EXPORTER=gofr

Andere Vorteile:
Wenn Sie einen Beitrag zu GOFR leisten, sei es in der Entwicklung oder beim Schreiben von Artikeln. Sie können kostenlose Swags (T-Shirts, Aufkleber) erhalten, indem Sie das Formular auf GitHub Readme (unten) ausfüllen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/aryanmehrotra/remote-runtime-log-level-change-using-golang-gofr-54d8?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen Es
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3